﻿namespace MicroCloud.Systems
{
    /// <summary>
    /// 字典种子数据初始化
    /// </summary>
    [Dependency(ServiceLifetime.Singleton)]
    [Description("系统内置字典数据")]
    public class KeyValueSeedDataInitializer : SeedDataInitializerBase<KeyValue, long>
    {
        #region 构造函数
        /// <summary>
        /// 初始化一个字典种子数据初始化 <see cref="KeyValueSeedDataInitializer"/> 的新实例
        /// </summary>
        /// <param name="rootProvider"></param>
        public KeyValueSeedDataInitializer(IServiceProvider rootProvider)
            : base(rootProvider)
        { }

        #endregion

        /// <summary>
        /// 获取 强制同步，每次服务重新启动后均执行同步
        /// </summary>
        public override bool ForceSync => false;

        #region 方法
        /// <summary>
        /// 重写以提供要初始化的种子数据
        /// </summary>
        /// <param name="provider">服务提供者</param>
        /// <returns></returns>
        protected override KeyValue[] SeedData(IServiceProvider provider)
        {
            return new[]
            {
                new KeyValue(SettingKeyConstants.SiteTitle, "微云平台", "微云平台(MicroCloud)", "微云开发平台(Micro Cloud Framework)") {  OrderNo = 1 },
                new KeyValue(SettingKeyConstants.SiteDescription, new SiteDescription{ Description = "科技改变未来 · 数据传承价值", Subdescription = "Technology Change Future · Data Transmit Dream" }, "微云开发平台.Net版(MicroCloud With AspNet)", "微云开发平台（MicroCloud Framework）简称 MicroCloud（Micro Cloud Framework），是一个基于.Net开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK，对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、WebApi、身份认证、权限授权等模块进行更高一级的自动化封装，并规范了一套业务实现的代码结构与代码编写操作流程，使的实际应用项目开发和运维更高效、更简单。") { OrderNo = 2 },
            };
        }

        /// <summary>
        /// 重写以提供判断某个实体是否存在的表达式
        /// </summary>
        /// <param name="entity">要判断的实体</param>
        /// <returns></returns>
        protected override Expression<Func<KeyValue, bool>> ExistingExpression(KeyValue entity)
        {
            return m => m.Key == entity.Key;
        }

        #endregion

    }
}